package design.patterns.singlemode;

/**
 * @Desc:   使用静态内部类实现更安全的单例模式
 *          1.我们把Singleton实例放到一个静态内部类中，这样可以避免了静态实例在Singleton类的加载阶段（类加载过程的其中一个
 *            阶段的，此时只创建了Class对象)就创建对象毕竟静态变量初始化是在SingletonInner类初始化时触发的，并且由于静态内
 *            部类只会被加载一次，所以这种写法也是线程安全的。
 *          2.但是序列化可能会破坏单例模式，使用反射强行调用私有构造器
 *          3.使用枚举单例的写法，我们完全不用考虑序列化和反射的问题，创建枚举实例只有编译器能够做到而已，
 *            见 枚举与单例模式 https://blog.csdn.net/javazejian/article/details/71333103
 * @author: cww
 * @DateTime: 2019-05-26 10:34
 */

public class SingletonInner {
    private static class Holder {
        private static SingletonInner inner = new SingletonInner();
    }
    private SingletonInner() {}
    public static SingletonInner getInstance(){
        return Holder.inner;
    }
}
